﻿using System;
using System.Collections.Generic;
using Entalpy.dto;
using Entalpy.Model;

namespace Entalpy.Controller
{
    public class ProcessFactory
    {
        /// <summary>
        /// Чтение данных из файла
        /// </summary>
        /// <param name="path">путь к файлу</param>
        /// <returns> Список с данными для гистограммы</returns>
        public static IList<Data> ReadData(string path)
        {
            IDataReader DataReader = new DataReader();
            IList<Data> MyData = DataReader.ReadData(path);
            return MyData;
        }
        /// <summary>
        /// Нахождение линии базиса
        /// </summary>
        /// <param name="Data">Данные эксперимента</param>
        /// <returns> значение базиса</returns>
        public static double GetBasis(IList<Data> Data)
        {
            IBasisSetter BasisSetter = new BasisSetter();
            double basis = BasisSetter.GetBasis(Data);
            
            return basis;
        }

        public static IDictionary<double,int> GetGistogram(IList<Data> Data)
        {
            IBasisSetter basisSetter = new BasisSetter();
            return basisSetter.GetGistogramData(Data);
        }
        /// <summary>
        /// Возвращает данные эксперимента приведенные к базисному
        /// значению
        /// </summary>
        /// <param name="Data">Данные эксперимента</param>
        /// <returns>Приведенные к базису данные.</returns>
        private static IList<Data> GetNewData(IList<Data> Data)
        {
            IBasisSetter BasisSetter = new BasisSetter();
            return BasisSetter.GetNewData(Data);
        }

        public static IDictionary<double, double> GetRelation(IList<Data> Data)
        {
            IDataPreparer DataPreparer = new DataPreparer();

            
            return DataPreparer.GetRelation(GetNewData(Data));
        }

        public static double GetEntalpy(IDictionary<double, double> results)
        {
            IDataPreparer DataPreparer = new DataPreparer();
            double[] constant = DataPreparer.GetLeastSquaresConstants(results);
            IEntalpyCalculator calc = new EntalpyCalculator();
            return calc.EntalpyGet(constant[0]);
        }

        public static IDictionary<double, double> GetLeastSquaresPoints(IDictionary<double, double> results)
        {
            IDataPreparer DataPreparer = new DataPreparer();
            return DataPreparer.GetLeastSquaresPoints(results);
        }

        public static double GetDelta(IDictionary<double, double> points, IDictionary<double, double> result)
        {
            IDataPreparer DataPreparer = new DataPreparer();
            return DataPreparer.GetDelta(points, result);
        }

    }
}
